import random

def generate_test_case(n, max_val, is_valid=True):
    """
    生成测试用例
    
    参数:
    n (int): 数组长度
    max_val (int): 数组元素最大值
    is_valid (bool): 是否生成可分割的数组
    
    返回:
    list: 生成的测试数组
    """
    if is_valid:
        # 生成可分割的数组
        target = random.randint(1, n * max_val // 2)
        subset = []
        current_sum = 0
        
        # 生成一个子集使其和为target
        while current_sum < target:
            remaining = target - current_sum
            if remaining == 0:
                break
            num = random.randint(1, min(remaining, max_val))
            subset.append(num)
            current_sum += num
        
        # 复制该子集并添加一些随机元素
        nums = subset.copy()
        sum_remaining = current_sum
        while len(nums) < n:
            if len(nums) == n - 1:
                # 确保总和为偶数
                if sum_remaining % 2 == 0:
                    nums.append(0)
                else:
                    nums.append(1)
            else:
                nums.append(random.randint(1, max_val))
        random.shuffle(nums)
        return nums
    else:
        # 生成不可分割的数组（总和为奇数）
        nums = [random.randint(1, max_val) for _ in range(n)]
        total = sum(nums)
        if total % 2 == 0:
            nums[0] += 1
        return nums

def generate_test_cases():
    """生成多种测试用例"""
    test_cases = []
    
    # 基本可分割案例
    test_cases.append([1, 5, 11, 5])
    
    # 基本不可分割案例
    test_cases.append([1, 2, 3, 5])
    
    # 边界案例
    test_cases.append([5])  # 单元素
    test_cases.append([2, 2])  # 两元素相等
    
    # 特殊值案例
    test_cases.append([1, 100, 100])  # 含超大元素
    test_cases.append([1] * 20)  # 全1数组
    
    # 随机生成案例
    for _ in range(5):
        test_cases.append(generate_test_case(10, 20, True))
        test_cases.append(generate_test_case(10, 20, False))
    
    # 大规模案例
    test_cases.append(generate_test_case(200, 100, True))
    test_cases.append(generate_test_case(200, 100, False))
    
    return test_cases

if __name__ == "__main__":
    # 生成并打印测试用例
    cases = generate_test_cases()
    for i, case in enumerate(cases):
        print(f"测试用例 {i+1}: {case}")    